package tutorial.main.data;
import android.content.ContentResolver;
import android.content.ContentValues;

import android.content.Context;
import android.content.ContentValues;
import android.database.Cursor;
import android.util.Log;
import tutorial.entidades.Evento;
import tutorial.main.control.Sync;
import tutorial.main.control.Utilities;
import tutorial.main.data.ProviderRegistro;

import java.util.ArrayList;


import android.net.Uri;

/**
 *  ESTA CLASE SE ENCARGA DE REALIZAR LAS CONSULTAS Y DE INTERPRETAR LOS CURSORES
 *  DEVUELTOS POR EL CONTENTPROVIDER 
 */
public class GestorBDLista  
{

	public static void insertEvento( Evento evento, Context ct)
	{
		ContentValues values = null;
		
		values = new ContentValues();
		values.put(Utilities.COLUMN_ID, evento.getId());
		values.put(Utilities.COLUMN_COD_USUARIO, evento.getCodUsuario());
		values.put(Utilities.COLUMN_ESTADO_CONECTADO,  evento.getEstadoConetado());
		values.put(Utilities.COLUMN_SINCRONIZADO,  evento.getSincronizado());
		values.put(Utilities.COLUMN_MOMENTO, evento.getMomento());
		values.put(Utilities.COLUMN_TIPO_CONEXION, evento.getTipoConexion());
		values.put(Utilities.COLUMN_SUBTIPO_CONEXION, evento.getSubtipoConexion());
		values.put(Utilities.COLUMN_REASON, evento.getRaeson());
		values.put(Utilities.COLUMN_POSICION_LATITUD, evento.getPosicionLatitud());
		values.put(Utilities.COLUMN_POSICION_LONGITUD, evento.getPosicionLongitud());
		values.put(Utilities.COLUMN_REASON, evento.getRaeson());
	
		ct.getContentResolver().insert(ProviderRegistro.CONTENT_URI,values);
		Log.v("GestorBDLista","INSERTO EVENTO Con Coordenadas");
	}	
	/**
	 * Guardo en la BD el id de usuario recien generado por el servidor
	 * @param u
	 * @param evento
	 * @param ct
	 */
	public static void guardarIdUsuario( Context ct, int id, String nomb)
	{
		ContentValues values = null;
		
		values = new ContentValues();
		values.put(Utilities.COLUMN_ID, id);
		values.put(Utilities.COLUMN_NOMBRE_USUARIO, nomb);
		
		ct.getContentResolver().insert(ProviderUsuario.CONTENT_URI,values);
		Log.v("GestorDBLista", "LOG USUARIO: GUARDO USUARIO EN LA BD");
	}
	
	public static int deleteEvento(Context ct, int id)
	{
		Log.v("GestorDBLista", "ELIMINO EL EVENTO: "+id);
		String[] stringArgs={String.valueOf(id)};
		//return ct.delete(ProviderRegistro.CONTENT_URI,Utilities.COLUMN_ID,stringArgs );
		return ct.getContentResolver().delete(ProviderRegistro.CONTENT_URI,Utilities.COLUMN_ID,stringArgs );
	}
	
	
	public static ArrayList<Evento> cargaEventosPrevios(Uri u, Context ct, int idUsuario) 
	{
		String[] id_us=new String[1];
		id_us[0]=String.valueOf(idUsuario);
		Cursor cursor =ct.getContentResolver().query(u, null, ProviderRegistro.CONSULTA_EVENTOS, id_us, null);
		ArrayList<Evento> events = new ArrayList<Evento>();
		if (cursor != null) 
		{
			events=getEventos(cursor);
		}
		cursor.close();
		Log.v("GestorDBLista","EVENTOS PREVIOS LEVANTADOS");
		return events;	    
	}
	
	public static int ultimoNmro( Context ct) 
	{
		int ult=0;		
		Cursor cursor = ct.getContentResolver().query(ProviderRegistro.CONTENT_URI, null, ProviderRegistro.CONSULTA_ULTIMO_NMRO, null, null);
		if (cursor != null) {
			
		    cursor.moveToLast();
		    int idIndex= cursor.getColumnIndex(Utilities.COLUMN_ID);
		    if(idIndex!=-1)
		    {
		    	ult=cursor.getInt(idIndex);
		    }
			cursor.close();
		}
		return ult;
	}
	
	public static int buscarIdUsuario( Context ct, String nom_us) 
	{
		String[] nom_usuario=new String[1];
		nom_usuario[0]=nom_us;
		int id_usuario=0;		
		Cursor cursor = ct.getContentResolver().query(ProviderUsuario.CONTENT_URI, null, ProviderUsuario.BUSCAR_ID, nom_usuario, null);
		if (cursor != null) {
			
		    cursor.moveToFirst();
		    int idIndex= cursor.getColumnIndex(Utilities.COLUMN_ID);
		    if(idIndex!=-1 && cursor.getCount()>0)
		    {
		    	id_usuario=cursor.getInt(idIndex);
		    }
		    
			cursor.close();
			
		}
		Log.v("GestorDBLista", "LOG USUARIO: BUSCO USUARIO EN LA BD");
		return id_usuario;
	}
	
	/**
	 * 
	 * Este metodo se encarga de traducir el cursos en un Array de eventos
	 * @param cursor
	 * @return
	 */
	private static ArrayList<Evento> getEventos(Cursor cursor) 
	{
		ArrayList<Evento> eventos = new ArrayList<Evento>();
		if (cursor != null) 
		{
			if (cursor.moveToFirst())
			{
				// Transformo el nombre de la columna en el INDEX de la misma (posicion)
				int idIndex = cursor.getColumnIndex(Utilities.COLUMN_ID);
				int codUsuarioIndex = cursor.getColumnIndex(Utilities.COLUMN_COD_USUARIO);
				int estadoConectadoIndex = cursor.getColumnIndex(Utilities.COLUMN_ESTADO_CONECTADO);
				int sincronizadoIndex = cursor.getColumnIndex(Utilities.COLUMN_SINCRONIZADO);
				int momentoIndex = cursor.getColumnIndex(Utilities.COLUMN_MOMENTO);
				int tipoConexionIndex = cursor.getColumnIndex(Utilities.COLUMN_TIPO_CONEXION);
				int subtipoConexionIndex = cursor.getColumnIndex(Utilities.COLUMN_SUBTIPO_CONEXION);				
				int reasonIndex = cursor.getColumnIndex(Utilities.COLUMN_REASON);
				int longitudIndex = cursor.getColumnIndex(Utilities.COLUMN_POSICION_LONGITUD);
				int latitudIndex = cursor.getColumnIndex(Utilities.COLUMN_POSICION_LATITUD);
				
				do 
				{
					Evento evento = new Evento();
					evento.setId(cursor.getInt(idIndex));
					evento.setCodUsuario(cursor.getInt(codUsuarioIndex));
					
					int s;
					s=cursor.getInt(sincronizadoIndex);
					if(s==0)
					{evento.setSincronizado(false);}
					else
					{evento.setSincronizado(true);}
					//----------------------------
					int b;
					b=cursor.getInt(estadoConectadoIndex);
					if(b==0)
					{evento.setEstadoConetado(false);}
					else
					{evento.setEstadoConetado(true);}
					
					evento.setMomento(cursor.getLong(momentoIndex));
					evento.setTipoConexion(cursor.getString(tipoConexionIndex));
					evento.setSubtipoConexion(cursor.getString(subtipoConexionIndex));
					evento.setReason(cursor.getString(reasonIndex));
					
					// Coordenadas
					evento.setPosicionLatitud(cursor.getDouble(latitudIndex));
					evento.setPosicionLongitud(cursor.getDouble(longitudIndex));
					
					eventos.add(evento);
				} while (cursor.moveToNext());
			}
		}
		
		return eventos;
	}
	
	
	public static boolean updateEvento(Evento evento,  Context ct) 
	{
		ContentValues values = new ContentValues();
		
		values.put(Utilities.COLUMN_ID, evento.getId());
		values.put(Utilities.COLUMN_COD_USUARIO, evento.getCodUsuario());
		values.put(Utilities.COLUMN_ESTADO_CONECTADO,  evento.getEstadoConetado());
		values.put(Utilities.COLUMN_SINCRONIZADO,  evento.getSincronizado());
		values.put(Utilities.COLUMN_MOMENTO, evento.getMomento());
		values.put(Utilities.COLUMN_TIPO_CONEXION, evento.getTipoConexion());
		values.put(Utilities.COLUMN_SUBTIPO_CONEXION, evento.getSubtipoConexion());
		values.put(Utilities.COLUMN_REASON, evento.getRaeson());
		values.put(Utilities.COLUMN_POSICION_LATITUD, evento.getPosicionLatitud());
		values.put(Utilities.COLUMN_POSICION_LONGITUD, evento.getPosicionLongitud());
	
		String[] selectionArgs={String.valueOf(evento.getId())};
		int resu= ct.getContentResolver().update(ProviderRegistro.CONTENT_URI, values, ProviderRegistro.UPDATE_EVENTO, selectionArgs);
		if (resu==ProviderRegistro.EXITO)
		{
			return true;
		}
		else
		{
			return false;
		}
		
	}
	
	public static Evento ultimoEvento( Context ct) 
	{
		String[] nom_usuario=new String[1];
		//int id_usuario=0;	
		Evento evento = new Evento();;
		Cursor cursor = ct.getContentResolver().query(ProviderRegistro.CONTENT_URI, null, ProviderRegistro.CONSULTA_ULTIMO_EVENTO, null, null);
		if (cursor != null)
		{
			if(cursor.getCount()==1) 
			{
			
		    	cursor.moveToFirst();
		    	int idIndex = cursor.getColumnIndex(Utilities.COLUMN_ID);
				int codUsuarioIndex = cursor.getColumnIndex(Utilities.COLUMN_COD_USUARIO);
				int estadoConectadoIndex = cursor.getColumnIndex(Utilities.COLUMN_ESTADO_CONECTADO);
				int sincronizadoIndex = cursor.getColumnIndex(Utilities.COLUMN_SINCRONIZADO);
				int momentoIndex = cursor.getColumnIndex(Utilities.COLUMN_MOMENTO);
				int tipoConexionIndex = cursor.getColumnIndex(Utilities.COLUMN_TIPO_CONEXION);
				int subtipoConexionIndex = cursor.getColumnIndex(Utilities.COLUMN_SUBTIPO_CONEXION);				
				int reasonIndex = cursor.getColumnIndex(Utilities.COLUMN_REASON);
				int longitudIndex = cursor.getColumnIndex(Utilities.COLUMN_POSICION_LONGITUD);
				int latitudIndex = cursor.getColumnIndex(Utilities.COLUMN_POSICION_LATITUD);
				
					evento.setId(cursor.getInt(idIndex));
					evento.setCodUsuario(cursor.getInt(codUsuarioIndex));
					
					int s;
					s=cursor.getInt(sincronizadoIndex);
					if(s==0)
					{evento.setSincronizado(false);}
					else
					{evento.setSincronizado(true);}
					//----------------------------
					int b;
					b=cursor.getInt(estadoConectadoIndex);
					if(b==0)
					{evento.setEstadoConetado(false);}
					else
					{evento.setEstadoConetado(true);}
					
					evento.setMomento(cursor.getLong(momentoIndex));
					evento.setTipoConexion(cursor.getString(tipoConexionIndex));
					evento.setSubtipoConexion(cursor.getString(subtipoConexionIndex));
					evento.setReason(cursor.getString(reasonIndex));
					
					// Coordenadas
					evento.setPosicionLatitud(cursor.getDouble(latitudIndex));
					evento.setPosicionLongitud(cursor.getDouble(longitudIndex));
			}
			cursor.close();
			Log.v("Widget", "cursorCount:"+cursor.getCount());
		}
		
		return evento;
	}

}
